#ifndef GAMEDATA_H
#define GAMEDATA_H
#include <QMap>
#include "eventcenter.h"
#include <QStringListModel>
//数值系统
//支持字符串、整数、浮点数、布尔值、随机数
enum DATATYPE{
    STRING_,INT_,FLOAT_,BOOL_,NONE_
};
class GameData
{
public:
    GameData(const GameData&) = delete;
    GameData& operator = (const GameData&) = delete;
    static GameData& Instance();
    ~GameData();
    void DeleteData(QString& name);
    void SaveData(QString& name);
    bool AddData(QString& name,int data);
    bool AddData(QString& name,QString& data);
    bool AddData(QString& name,float data);
    bool AddData(QString& name,bool data);
    bool ChangeName(QString& oldName,QString& newName);

    //将数据替换为指定存档的数据。
    //若item为空则替换为原始数据
    void RefreshData(RecordItem* item = nullptr);

    QMap<QString,QString> stringData;
    QMap<QString,int> intData;
    QMap<QString,float> floatData;
    QMap<QString,bool> boolData;
    //数据是否可见
    QMap<QString,bool> visible;
    QStringList GetDataList();
    QStringListModel* GetDataListModel();
    DATATYPE GetDataType(const QString& name);

    int curRegisterNodeId = 0;
    //新建节点时赋予新节点的id
private:
    GameData();

    QStringList list;
    QStringListModel* listModel = nullptr;
};

#endif // GAMEDATA_H
